#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Aquarium
# beenden: pkill -9 aquarium.py

import sys
import time
import random
import pygame
import numpy as np
import math

ScreenW=30
ScreenH=20
Zoom=20
RasterColor=50
HindernissColor=100
ObjektX=11 # Spieler
ObjektY=4
Objekt1Winkel=90
Objekt1Laenge=4
xPos=0 # Mouse-Cursor
yPos=0
Taste=0
Energie=100

# ------------------------------------------
def Update():
  global ObjektX, ObjektY, Taste, Objekt1Winkel, Energie # Zugriff auf Variable erhalten

  if Taste==1:
    print "Taste links" 
    if Bildschirm[ObjektX-1,ObjektY]!=1: # keine Wand?
#      ObjektX-=1
       Objekt1Winkel-=45
  if Taste==2: # Taste rechts?
    print "Taste rechts"
    if Bildschirm[ObjektX+1,ObjektY]!=1: # keine Wand?
#      ObjektX+=1
      Objekt1Winkel+=45
  if Taste==3: # Taste hoch?
    print "Taste Hoch"
    Abstand=Objekt1Laenge
    x=round(ObjektX+Abstand*math.sin(Objekt1Winkel*math.pi/180))
    y=round(ObjektY-Abstand*math.cos(Objekt1Winkel*math.pi/180))
    if Bildschirm[x,y]!=1: # keine Wand?
      Abstand=1
      x=round(ObjektX+Abstand*math.sin(Objekt1Winkel*math.pi/180))
      y=round(ObjektY-Abstand*math.cos(Objekt1Winkel*math.pi/180))
      ObjektX=x
      ObjektY=y
      Energie=Energie-1
    if y>ScreenH-5: # Nachtanken?
      print "Nachtanken"
      Energie=100




# ------------------------------------------
def Ausgabe():

  window.fill((0, 0, 0)) # Bildschirm loeschen

  # Raster zeichnen
  for x in range(0, ScreenW):
    pygame.draw.line(window, (RasterColor,RasterColor,RasterColor), (x*Zoom, 0), (x*Zoom, ScreenW*Zoom))
  for y in range(0, ScreenH):
    pygame.draw.line(window, (RasterColor,RasterColor,RasterColor), (0, y*Zoom), (ScreenW*Zoom, y*Zoom))

  # Bildschirm ausgeben
  for x in range(0, ScreenW):
    for y in range(0, ScreenH):
      if Bildschirm[x,y] == 1: # Hinderniss
        pygame.draw.rect(window, (HindernissColor,HindernissColor,HindernissColor), (x*Zoom,y*Zoom,1*Zoom,1*Zoom))


  # Spieler ausgeben
#  pygame.draw.circle(window, (HindernissColor,2*HindernissColor,HindernissColor), (ObjektX*Zoom+Zoom/2,ObjektY*Zoom+Zoom/2),10)

  # Spieler ausgeben
  for i in range(0, Objekt1Laenge):
    Abstand=i
    x=round(ObjektX+Abstand*math.sin(Objekt1Winkel*math.pi/180))
    y=round(ObjektY-Abstand*math.cos(Objekt1Winkel*math.pi/180))
    pygame.draw.rect(window, (HindernissColor,2*HindernissColor,HindernissColor), (x*Zoom,y*Zoom,1*Zoom,1*Zoom))

  # Energielevel
  myfont = pygame.font.SysFont("freesans", Zoom)
  label = myfont.render("Energie: "+str(Energie), 1, (255,255,255))
  window.blit(label, (50,0))

  pygame.display.flip()

# end def Ausgabe():





# ------------------------------------------
# M A I N
# ------------------------------------------
# Array 
Bildschirm=np.zeros((ScreenW,ScreenH),dtype=int) # initialisieren mit 0

# Hindernisse festlegen
Bildschirm[10,10]=1
Bildschirm[11,10]=1
Bildschirm[12,10]=1
Bildschirm[13,10]=1
Bildschirm[14,10]=1
Bildschirm[14,9]=1
Bildschirm[14,8]=1
Bildschirm[14,7]=1

Bildschirm[20,18]=1

Bildschirm[3,4]=1
Bildschirm[4,4]=1
Bildschirm[5,4]=1

Bildschirm[3,16]=1
Bildschirm[4,16]=1
Bildschirm[5,16]=1


# Hinderniss am Boden
for x in range(0, ScreenW):
  Bildschirm[x,ScreenH-1]=1
# Hinderniss Decke
for x in range(0, ScreenW):
  Bildschirm[x,0]=1
# Hinderniss linke Wand
for x in range(0, ScreenH-1):
  Bildschirm[0,x]=1
# Hinderniss rechte Wand
for x in range(0, ScreenH-1):
  Bildschirm[ScreenW-1,x]=1

#create the screen
pygame.init()
window = pygame.display.set_mode((ScreenW*Zoom,ScreenH*Zoom))


# time.sleep(20)

#input handling
while True: 
#  time.sleep(0.02) # um CPU Auslastung zu senken
  Ausgabe()
  Update()  
  Taste=0 # Taste loeschen
  for event in pygame.event.get(): 
    if event.type == pygame.QUIT: 
      sys.exit(0) 
    elif event.type == pygame.KEYDOWN:
      if event.key == pygame.K_LEFT:   
        Taste=1
      elif event.key == pygame.K_RIGHT:
        Taste=2
      elif event.key == pygame.K_UP:
        Taste=3
      elif event.key == pygame.K_DOWN:
        Taste=4
  Taste=random.randint(1,4) # Zufallstaste
